ゴールデンウィークなのでGoogle App Engineに機械学習のモデルをdeployして遊んでみた (using TensorFlow 2.1)
こんにちは、ゴールデンウィークはしっかりステイホームしているMr.Moです。
GWに何をやろうかなーと思っていたら目の前にApp Engineと機械学習のモデルがあったので遊んでみました!
Google App Engineとは
下記に詳しい記事があるのでご参照ください!
- https://docs.google.com/presentation/d/1trxz4_ksRyHdj2cAGVKiy3gtx7q1-AE06XbzLraBD44/htmlpresent
- https://dev.classmethod.jp/articles/gae-webapp/
なぜGAEなのか?
App Engine無しでは生きていけない体になっているからです。(笑)
あとはやっぱり無料で動かせないかと思いまして...
最低限必要なもの
- Google Cloud Platformにログインできるアカウント
- 機械学習のモデル
とりあえずやってみよう!
前提としてPython3.7の環境で動かしていきます。Python3.7でTensorflowは動くようになってるのであっさり上手くいくんじゃないかなーと思ってますね。
まずはStandard環境で試してみる!
さっそくStandard環境にgcloud app deploy
してみました。
まずチャレンジしたapp.yaml
とrequirements.txt
は下記です。
- app.yaml
runtime: python37 entrypoint: gunicorn -b :$PORT main:app
- requirements.txt
Flask==1.1.1 python-dotenv==0.10.3 line-bot-sdk==1.16.0 gunicorn==20.0.4 tensorflow==2.1.0 Pillow==7.1.1
するとエラーが出てしまい...
いったんFlexibleで様子見...
序盤すぎるところでエラーが出て心が折れたのですぐに(深く考えず)Flexibleに切り替えて試した設定は下記になります。
- app.yaml
runtime: custom env: flex readiness_check: app_start_timeout_sec: 1200 automatic_scaling: min_num_instances: 1 max_num_instances: 1
- requirements.txt
(先程と同じ)
- Dockerfile
FROM gcr.io/google-appengine/python # Create a virtualenv for dependencies. This isolates these packages from # system-level packages. # Use -p python3 or -p python3.7 to select python version. Default is version 2. RUN virtualenv -p python3.7 /env # Setting these environment variables are the same as running # source /env/bin/activate. ENV VIRTUAL_ENV /env ENV PATH /env/bin:$PATH # Copy the application's requirements.txt and run pip to install all # dependencies into the virtualenv. ADD requirements.txt /app/requirements.txt RUN pip install -r /app/requirements.txt # Add the application source code. ADD . /app # Run a WSGI server to serve the application. gunicorn must be declared as # a dependency in requirements.txt. CMD gunicorn -b :$PORT main:app
デプロイが成功し、動いたものの下記のようにログを見ると良くなさそうな出力が出ており...
んー?なんかおかしいですね...
ちょっと調べてみる
ちょっと調べたらcpuの時は明示的にtensorflow-cpu
にしないといけないと分かり(何もつけないのがcpuになると思っていた)
改めてStandardで!!
最終的に下記の設定に落ち着きました!
インスタンスクラスをF2に上げないと動かなかったので、完全無料で動かすというわけにはいかなかったですね...(けど14時間は無料とも言える!?)
- app.yaml
runtime: python37 instance_class: F2 entrypoint: gunicorn -b :$PORT main:app env_variables: TF_CPP_MIN_LOG_LEVEL: "2" automatic_scaling: min_instances: 0 max_instances: 1
- requirements.txt
Flask==1.1.1 python-dotenv==0.10.3 line-bot-sdk==1.16.0 gunicorn==20.0.4 tensorflow-cpu==2.1.0 Pillow==7.1.1
そして誕生した 迷子を探すBot
こうして、うちの子供がデパートとかで迷子になった時に使えそうなLINE Botが爆誕しました。(第三者でも写真を撮れば機械学習のモデルがうちの子を判定してくれるっぽいやつです)
早く新型コロナウイルス関連が落ち着いてデパートとかに気軽にいけるようになると良いですね!
まとめ
公園に行きたがる二人のキッズを説得しながら隙を見て検証作業をしたので結構大変でしたね^^;
App Engineは個人の開発でわりとずっと使ってますが、すごく良いサービスだと思います。
(ただ最近はCloud Runに浮気気味かもしれません...)
取りとめのない内容でしたが、ゴールデンウィークを有効活用できましたー!
ちなみに今なら下記の情報の通りGoogle Cloud Platform(GCP)のトレーニングが無料で利用できるみたいですよー、皆様もゴールデンウィークにステイホームしながら是非!